/**
 * 判断一个序列是否为小根堆
 * 这里要使用的是广度优先遍历
 */
#include<iostream>
#include<string>
#include<vector>
using namespace std;
/**
 * 注意，答案中的下标都是从1开始的，所以要有改动，下面的这些代码有问题！！！而且还没有修改
 */
bool isMinHeap(vector<int> a){
    int len=a.size();
    if(a.size()%2==0){//如果len是偶数，那么分开之后有一个单分支节点（也就是最右下角的那个子树），因为他只有一个叶子，下面的2*i+1会越界，所以要单独判断
        if(a[a.size()/2]>a[a.size()]){//判断单分支节点
            return false;
        }
        //注意这里的遍历顺序:根据
        for(int i=len/2-1;i>=1;i--){//判断所有双分支节点
            if(a[i]>a[2*2]||a[i]>a[2*i+1]){//如果根节点大于任意一个叶子节点就返回false
                return false;
            }
        }
    }else{//len为奇数，没有单分支节点
        for(int i=len/2;i>=1;i--){//判断双分支节点
            if(a[i]>a[i*2]||a[i]>a[2*i+1]){
                return true;
            }
        }
    }
}